Fast implementation of the datetime type


date

import datetime as dt
a_date = dt.date(year=2020, month=12, day=31)
a_date
#  datetime.date(2020, 12, 31)
a_date.year, a_date.month, a_date.day
#  (2020, 12, 31)
a_date.isoformat()
#  '2020-12-31'
a_date.strftime("%a %d %b %Y")
#  'Thu 31 Dec 2020'
import datetime as dt
dt.date.today()
#  datetime.date(2020, 8, 31)
dt.date.fromisoformat("2020-12-31") # ISO to POSIX
#  datetime.date(2020, 12, 31)

time

import datetime as dt
a_time = dt.time(hour=23, minute=59, second=59, microsecond=999999)
a_time
#  datetime.time(23, 59, 59, 999999)
a_time.hour, a_time.minute, a_time.second, a_time.microsecond
#  (23, 59, 59, 999999)
a_time.isoformat()
#  '23:59:59.999999'
a_time.strftime("%H:%M:%S")
#  '23:59:59'
import datetime as dt
dt.time.fromisoformat("23:59:59") # ISO to POSIX
#  datetime.time(23, 59, 59)
dt.time.fromisoformat("23:59:59:999999") # ISO to POSIX
#  datetime.time(23, 59, 59, 999999)

datetime

import datetime as dt
a_datetime = dt.datetime(year=2020, month=12, day=31, hour=23, minute=59, second=59, microsecond=999999)
a_datetime
#  datetime.datetime(2020, 12, 31, 23, 59, 59, 999999)
a_datetime.year, a_datetime.month, a_datetime.day
#  (2020, 12, 31)
a_datetime.hour, a_datetime.minute, a_datetime.second, a_datetime.microsecond
#  (23, 59, 59, 999999)
a_datetime.isoformat()
#  '2020-12-31T23:59:59.999999'
a_datetime.strftime("%Y-%m-%d %H:%M:%S")
#  '2020-12-31 23:59:59'
import datetime as dt
dt.datetime.now()
#  datetime.datetime(2020, 8, 31, 12, 35, 10, 253855)

conversions

import datetime as dt
import time as tm
timestamp = tm.time() # time in seconds since 1970-01-01
timestamp
#  1598873710.315678
a_datetime = dt.datetime.fromtimestamp(timestamp) # Unix to POSIX
a_datetime
#  datetime.datetime(2020, 8, 31, 12, 35, 10, 315678)
dt.datetime.timestamp(a_datetime) # POSIX to Unix
#  1598873710.315678
dt.datetime.fromisoformat("2020-12-31T23:59:59:999999") # ISO to POSIX
#  datetime.datetime(2020, 12, 31, 23, 59, 59, 999999)

timezones

import datetime as dt
from dateutil import tz
dt.datetime.now(tz=tz.tzlocal())
#  datetime.datetime(2020, 8, 31, 12, 37, 6, 871020, tzinfo=tzlocal())
dt.datetime.now(tz=tz.gettz("Europe/London")).tzname()
#  'BST'
dt.datetime.now(tz=tz.gettz("America/New_York")).isoformat()
#  '2020-08-31T07:37:06.883056-04:00'

timedelta

import datetime as dt
delta = dt.timedelta(days=100)
delta
#  datetime.timedelta(days=100)
dt.date.today() - delta
#  datetime.date(2020, 5, 23)
(dt.date.today() - delta) < dt.date.today()
#  True

misc

import datetime as dt
dt.MINYEAR
#  1
dt.MAXYEAR
# dt.tzinfo()
# dt.timezone()
#  9999

appendix: dir

from pprint import pprint
import datetime as dt
pprint(dir(dt))
#  ['MAXYEAR',
#   'MINYEAR',
#   '__builtins__',
#   '__cached__',
#   '__doc__',
#   '__file__',
#   '__loader__',
#   '__name__',
#   '__package__',
#   '__spec__',
#   'date',
#   'datetime',
#   'datetime_CAPI',
#   'sys',
#   'time',
#   'timedelta',
#   'timezone',
#   'tzinfo']

date

from pprint import pprint
import datetime as dt
pprint(dir(dt.date))
#  ['__add__',
#   '__class__',
#   '__delattr__',
#   '__dir__',
#   '__doc__',
#   '__eq__',
#   '__format__',
#   '__ge__',
#   '__getattribute__',
#   '__gt__',
#   '__hash__',
#   '__init__',
#   '__init_subclass__',
#   '__le__',
#   '__lt__',
#   '__ne__',
#   '__new__',
#   '__radd__',
#   '__reduce__',
#   '__reduce_ex__',
#   '__repr__',
#   '__rsub__',
#   '__setattr__',
#   '__sizeof__',
#   '__str__',
#   '__sub__',
#   '__subclasshook__',
#   'ctime',
#   'day',
#   'fromisocalendar',
#   'fromisoformat',
#   'fromordinal',
#   'fromtimestamp',
#   'isocalendar',
#   'isoformat',
#   'isoweekday',
#   'max',
#   'min',
#   'month',
#   'replace',
#   'resolution',
#   'strftime',
#   'timetuple',
#   'today',
#   'toordinal',
#   'weekday',
#   'year']

time

from pprint import pprint
import datetime as dt
pprint(dir(dt.time))
#  ['__class__',
#   '__delattr__',
#   '__dir__',
#   '__doc__',
#   '__eq__',
#   '__format__',
#   '__ge__',
#   '__getattribute__',
#   '__gt__',
#   '__hash__',
#   '__init__',
#   '__init_subclass__',
#   '__le__',
#   '__lt__',
#   '__ne__',
#   '__new__',
#   '__reduce__',
#   '__reduce_ex__',
#   '__repr__',
#   '__setattr__',
#   '__sizeof__',
#   '__str__',
#   '__subclasshook__',
#   'dst',
#   'fold',
#   'fromisoformat',
#   'hour',
#   'isoformat',
#   'max',
#   'microsecond',
#   'min',
#   'minute',
#   'replace',
#   'resolution',
#   'second',
#   'strftime',
#   'tzinfo',
#   'tzname',
#   'utcoffset']

datetime

from pprint import pprint
import datetime as dt
pprint(dir(dt.datetime))
#  ['__add__',
#   '__class__',
#   '__delattr__',
#   '__dir__',
#   '__doc__',
#   '__eq__',
#   '__format__',
#   '__ge__',
#   '__getattribute__',
#   '__gt__',
#   '__hash__',
#   '__init__',
#   '__init_subclass__',
#   '__le__',
#   '__lt__',
#   '__ne__',
#   '__new__',
#   '__radd__',
#   '__reduce__',
#   '__reduce_ex__',
#   '__repr__',
#   '__rsub__',
#   '__setattr__',
#   '__sizeof__',
#   '__str__',
#   '__sub__',
#   '__subclasshook__',
#   'astimezone',
#   'combine',
#   'ctime',
#   'date',
#   'day',
#   'dst',
#   'fold',
#   'fromisocalendar',
#   'fromisoformat',
#   'fromordinal',
#   'fromtimestamp',
#   'hour',
#   'isocalendar',
#   'isoformat',
#   'isoweekday',
#   'max',
#   'microsecond',
#   'min',
#   'minute',
#   'month',
#   'now',
#   'replace',
#   'resolution',
#   'second',
#   'strftime',
#   'strptime',
#   'time',
#   'timestamp',
#   'timetuple',
#   'timetz',
#   'today',
#   'toordinal',
#   'tzinfo',
#   'tzname',
#   'utcfromtimestamp',
#   'utcnow',
#   'utcoffset',
#   'utctimetuple',
#   'weekday',
#   'year']

timedelta

from pprint import pprint
import datetime as dt
pprint(dir(dt.timedelta))
#  ['__abs__',
#   '__add__',
#   '__bool__',
#   '__class__',
#   '__delattr__',
#   '__dir__',
#   '__divmod__',
#   '__doc__',
#   '__eq__',
#   '__floordiv__',
#   '__format__',
#   '__ge__',
#   '__getattribute__',
#   '__gt__',
#   '__hash__',
#   '__init__',
#   '__init_subclass__',
#   '__le__',
#   '__lt__',
#   '__mod__',
#   '__mul__',
#   '__ne__',
#   '__neg__',
#   '__new__',
#   '__pos__',
#   '__radd__',
#   '__rdivmod__',
#   '__reduce__',
#   '__reduce_ex__',
#   '__repr__',
#   '__rfloordiv__',
#   '__rmod__',
#   '__rmul__',
#   '__rsub__',
#   '__rtruediv__',
#   '__setattr__',
#   '__sizeof__',
#   '__str__',
#   '__sub__',
#   '__subclasshook__',
#   '__truediv__',
#   'days',
#   'max',
#   'microseconds',
#   'min',
#   'resolution',
#   'seconds',
#   'total_seconds']